package com.example.stuwork.service;

import com.example.stuwork.common.Result;
import com.example.stuwork.pojo.Student;

import java.util.List;

/**
 * 学生服务接口
 */
public interface StudentService {

    /**
     * 获取所有学生
     *
     * @return 学生列表
     */
    Result<List<Student>> getAllStudents();

    /**
     * 获取学生信息
     *
     * @param studentId 学号
     * @return 学生信息
     */
    Result<Student> getStudentById(String studentId);

    /**
     * 添加学生
     *
     * @param student 学生信息
     * @return 结果
     */
    Result<?> addStudent(Student student);

    /**
     * 更新学生信息
     *
     * @param student 学生信息
     * @return 结果
     */
    Result<?> updateStudent(Student student);

    /**
     * 删除学生
     *
     * @param studentId 学号
     * @return 结果
     */
    Result<?> deleteStudent(String studentId);

    /**
     * 修改密码
     *
     * @param studentId    学号
     * @param oldPassword  旧密码
     * @param newPassword  新密码
     * @return 结果
     */
    Result<?> changePassword(String studentId, String oldPassword, String newPassword);

    /**
     * 按班级ID获取学生
     *
     * @param classId 班级ID
     * @return 学生列表
     */
    Result<List<Student>> getStudentsByClassId(Long classId);

    /**
     * 按院系编号获取学生
     *
     * @param deptNumber 院系编号
     * @return 学生列表
     */
    Result<List<Student>> getStudentsByDeptNumber(String deptNumber);

    /**
     * 按入学年份获取学生
     *
     * @param year 入学年份
     * @return 学生列表
     */
    Result<List<Student>> getStudentsByYear(String year);

    /**
     * 按专业编码获取学生
     *
     * @param majorCode 专业编码
     * @return 学生列表
     */
    Result<List<Student>> getStudentsByMajorCode(String majorCode);

    /**
     * 按课程ID获取学生
     *
     * @param courseId 课程ID
     * @return 学生列表
     */
    Result<List<Student>> getStudentsByCourseId(Long courseId);

    /**
     * 搜索学生
     *
     * @param keyword 关键字
     * @return 学生列表
     */
    Result<List<Student>> searchStudents(String keyword);

    /**
     * 获取班级学生数量
     *
     * @param classId 班级ID
     * @return 学生数量
     */
    Result<Integer> getStudentCountByClassId(Long classId);
} 